package com.tfjybj.itoo.teach.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.teach.entity.CourseEntity;
import com.tfjybj.itoo.teach.model.CourseModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * CourseDao接口
 * course表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
@Repository("courseDao")
public interface CourseDao extends BaseMapper<CourseEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据课程名称模糊查询course
     *
     * @param name 课程名称
     * @return 模糊查询的course集合
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<CourseModel> queryLikeName(@Param("name") String name);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 页面初始化查询所有课程信息
     *
     * @return 课程信息model集合
     * @author 张家豪
     * @since 2018.11.08 10:32
     */
    List<CourseModel> queryAllCourseInfo();

    /**
     * 根据学院id和代码查询课程信息model
     *
     * @param code 课程代码
     * @param academy 学院id
     * @return 课程信息model
     * @author 张家豪
     * @since 2018.11.16 14:57
     */
    List<CourseModel> findCourseByCodeAndAcademy(@Param("code") String code, @Param("academy") String academy);

    /**
     * 根据代码名称学院模糊查询courseModel
     *
     * @param code    课程代码
     * @param name    课程名称
     * @param academy 学院id
     * @return 课程信息model
     * @author 张家豪
     * @since 2018.11.16 19:25
     */
    List<CourseModel> fuzzyQueryCourse(@Param("code") String code, @Param("name") String name, @Param("academy") String academy);

    /**
     * 根据学院ID查询本学院课程+公选课
     *
     * @param academy 学院ID
     * @return courseModel
     * @author 张家豪
     * @since 2018.11.17 11:02
     */
    List<CourseModel> queryCourseByacademyOrPub(@Param("academy") String academy);

    /**
     * 根据学院ID查询非公选课
     *
     * @param academy 学院id
     * @return courseModel
     * @author 张家豪
     * @since 2018.11.18 11:24
     */
    List<CourseModel> queryNonPubCourseByAcademy(@Param("academy") String academy);

    /**
     * 根据学院ID查询公选课
     *
     * @param academy 学院id
     * @return courseModel
     * @author 张家豪
     * @since 2018.11.18 11:24
     */
    List<CourseModel> queryPubCourseByAcademy(@Param("academy") String academy);

    /**
     * 根据id查询课程信息，筛选非公选课
     *
     * @param ids 课程id集合
     * @return courseModel
     * @author 张家豪
     * @since 2018.11.18 15:21
     */
    List<CourseModel> queryNonPubCourseByIds(@Param("Ids") List<String> ids);

    /**
     * 根据id查询课程信息，筛选公选课
     *
     * @param ids 课程id集合
     * @return courseModel
     * @author 张家豪
     * @since 2018.11.18 15:21
     */
    List<CourseModel> queryPubCourseByIds(@Param("Ids") List<String> ids);

    /**
     * 根据ids查询课程信息
     *
     * @param ids 课程id集合
     * @return courseModel
     * @author 张家豪
     * @since 2018.11.18 15:21
     */
    List<CourseModel> queryCourseByIds(@Param("Ids") List<String> ids);

    /**
     * 根据code查询课程信息-验证code是否重复
     *
     * @param code 课程代码
     * @return 课程信息
     * @author 张家豪
     * @since 2018.11.22 08:28
     */
    List<CourseModel> findByCode(@Param("code") String code);

    /**
     * 根据name查询课程信息-验证name是否重复
     *
     * @param name 课程代码
     * @return 课程信息
     * @author 张家豪
     * @since 2018.11.22 08:28
     */
    List<CourseModel> findByName(@Param("name") String name);

    /**
     * 根据课程类型和所属学院查询课程信息（类型必填，学院选填）
     *
     * @param academyId  学院id
     * @param courseType 课程类型
     * @return courseModel
     * @author 张家豪
     * @since 2018.11.22 14:51
     */
    List<CourseModel> queryCourseByTypeAndAcademy(@Param("courseType") List<String> courseType, @Param("academyId") String academyId);

    /**
     * 根据学院名称查询id-导入用
     *
     * @param academy 名称
     * @return AcademyModel
     * @author 张家豪
     * @since 2018.11.25 18:35
     */
    String getAcademyIdByName(@Param("academy") String academy);

    /**
     * 根据课程名称查询课程信息
     *
     * @param name 课程名称
     * @return courseEntity
     * @author 张家豪
     * @since 2018.11.28 14:38
     */
    List<CourseEntity> findCourseByName(@Param("name") String name);

    /**
     * 根据学院ID查询所有课程
     *
     * @param academyId 学院id
     * @return courseModel
     * @author 宋喆
     * @since 2018.12.14 20:05
     */
    List<CourseModel> queryCourseByacademyId(@Param("academyId") String academyId);

    /**
     * 根据课程id查询课程名称
     *
     * @param id id
     * @return CourseEntity
     * @author 杨江涛
     * @since 2018-11-24 20:21:21
     */
    CourseEntity findCourse(@Param("id") String id);

    /**
     * 根据参数模糊查询课程名称返回list类型
     *
     * @param searchInfo 模糊查询条件（课程名称/课程代码）searchInfo
     * @return 根据参数模糊查询课程名称返回list类型
     * @author 杨江涛
     * @since 2.0.0  2018-12-6 14:50:58
     */
    List<CourseEntity> getCourse(@Param("searchInfo") String searchInfo);

    /**
     * 创建考试查询课程,无参查询
     *
     * @param semester      semester
     * @param institutionId institutionId
     * @return List<CourseEntity>
     * @author maying
     * @since 2018-12-8 21:42:00
     */
    List<CourseEntity> inquiryCourse(@Param("semester") String semester, @Param("institutionId") String institutionId);

    /**
     * 课程练习-查询所有属于课程练习的课程
     *
     * @return 是否查询成功
     * @author 贾建清
     * @since 2.0.0 2019-3-24 09:51:24
     */
    List<CourseEntity> queryCourseAll();

}
